import { PrismaClient } from '@prisma/client';

const prisma = new PrismaClient();

type NewsItem = {
  title: string;
  html: string; // HTML 正文内容
  category: string; // 归属分类名称
  viewCount?: number;
  favoritesCount?: number;
};

// 简单去除 HTML 标签并压缩空白
function stripHtml(input: string): string {
  return input.replace(/<[^>]*>/g, '').replace(/\s+/g, ' ').trim();
}

// 定义热点资讯分类（归属于 hot_news 菜单）
const NEWS_CATEGORIES = [
  'AI 大模型',
  '云计算与边缘',
  '网络安全',
  '硬件芯片',
  '开源与工具',
];

// 10 篇模拟资讯（图片留空，后续补充），正文为 HTML 文本
const NEWS_ITEMS: NewsItem[] = [
  {
    title: 'GPT-5 传闻曝光：推理与多模态显著增强，推理基准提升 32%',
    html: `
      <h2>概览</h2>
      <p>业内消息显示，新一代大模型将重点强化 <strong>复杂链式推理</strong> 与 <strong>多模态融合</strong> 能力。在最新的内部基准测试中，综合推理分数较上一版本提升 <strong>32%</strong>，代码生成正确率提升 <strong>18%</strong>，数学解题通过率提升 <strong>21%</strong>。</p>
      <h3>核心指标</h3>
      <ul>
        <li>推理深度（CoT 层级）：从平均 5 层提升到 <strong>8 层</strong></li>
        <li>函数调用稳定性：面向工具调用场景，成功率提升至 <strong>93%</strong></li>
        <li>多模态能力：图像-文本联合评测提升 <strong>27%</strong></li>
        <li>参数规模：预计超 <strong>2T</strong>（未官方确认）</li>
      </ul>
      <blockquote>多模态理解与结构化输出是本次升级的两大重点方向。</blockquote>
    `,
    category: 'AI 大模型',
    viewCount: 4821,
    favoritesCount: 236,
  },
  {
    title: '国内云厂商 2025 Q3 市场份额：Top3 合计 71%，边缘节点新增 1,200+',
    html: `
      <p>市场研究报告显示，2025 年第三季度国内 IaaS 市场规模同比增长 <strong>23%</strong>，前三云厂商份额合计 <strong>71%</strong>。</p>
      <h3>边缘与性能</h3>
      <ul>
        <li>边缘节点新增：<strong>1,200+</strong></li>
        <li>对象存储：Bucket 月活增长 <strong>29%</strong></li>
        <li>平均请求时延：下降到 <strong>28ms</strong></li>
        <li>K8s 集群规模：超过 <strong>30 万节点</strong></li>
      </ul>
      <p>FinOps 体系落地后，企业平均云成本节省约 <strong>17%</strong>。</p>
    `,
    category: '云计算与边缘',
    viewCount: 3569,
    favoritesCount: 118,
  },
  {
    title: '本周安全通报：新增 143 个高危 CVE，RCE 占比 22%',
    html: `
      <p>安全社区通报称，本周新增 <strong>143</strong> 个高危 CVE，其中远程代码执行（RCE）占 <strong>22%</strong>，提权漏洞占 <strong>15%</strong>。</p>
      <h3>受影响范围</h3>
      <ul>
        <li>三款常用 Web 框架</li>
        <li>两款企业级数据库组件</li>
      </ul>
      <h3>建议措施</h3>
      <ol>
        <li>关键业务资产优先升级，启用 <strong>WAF 规则集 v3.8</strong></li>
        <li>部署 <strong>SBOM</strong> 扫描，构建链路启用 <strong>SAST</strong></li>
      </ol>
    `,
    category: '网络安全',
    viewCount: 6132,
    favoritesCount: 302,
  },
  {
    title: '3nm+ 节点量产：能效提升 28%，晶体管密度提升 19%',
    html: `
      <p>先进制程节点进入量产阶段，相比 3nm，<strong>3nm+</strong> 在能效上提升 <strong>28%</strong>，晶体管密度提升 <strong>19%</strong>，初期良率已达 <strong>82%</strong>。</p>
      <ul>
        <li>HPC 与 AI 加速器订单增长 <strong>37%</strong></li>
        <li>出货周期缩短 <strong>11%</strong></li>
        <li>预计 2026 年启动 <strong>2nm</strong> 早期试产线</li>
      </ul>
    `,
    category: '硬件芯片',
    viewCount: 4290,
    favoritesCount: 189,
  },
  {
    title: '向量数据库 v1.8：索引构建速度提升 2.4 倍，QPS 提升 37%',
    html: `
      <p>热门向量数据库发布 <strong>v1.8</strong>，优化 HNSW 索引与压缩模块，索引构建速度提升 <strong>2.4 倍</strong>，百万规模数据集查询 <strong>QPS 提升 37%</strong>。</p>
      <ul>
        <li>新增冷热分层存储</li>
        <li>Schema 迁移无需停机</li>
        <li>社区贡献者超过 <strong>1,500</strong> 人</li>
      </ul>
    `,
    category: '开源与工具',
    viewCount: 2986,
    favoritesCount: 142,
  },
  {
    title: 'AI 推理加速卡出货创新高：预计突破 180 万片，同比增 62%',
    html: `
      <p>渠道数据显示，2025 年 AI 推理加速卡出货量预计突破 <strong>180 万片</strong>，同比增幅 <strong>62%</strong>。</p>
      <ul>
        <li>PCIe Gen5 带宽利用率：<strong>74%</strong></li>
        <li>NVLink 新一代互联规模化部署</li>
        <li>主流显存规格：48GB / 96GB，适配 LLM Inference</li>
      </ul>
    `,
    category: '硬件芯片',
    viewCount: 5411,
    favoritesCount: 265,
  },
  {
    title: '边缘云 GPU 租赁均价下降 17%，容器冷启动缩短至 1.3s',
    html: `
      <p>受供给增加与调度优化影响，边缘云 <strong>GPU 租赁均价环比下降 17%</strong>，容器冷启动时间缩短至 <strong>1.3s</strong>，跨边域镜像分发速度提升 <strong>41%</strong>。</p>
      <p>新增边缘 POP：<strong>38</strong>；IoT 网关活跃连接数增长到 <strong>820 万</strong>。</p>
    `,
    category: '云计算与边缘',
    viewCount: 3720,
    favoritesCount: 124,
  },
  {
    title: '开源推理引擎支持 LoRA 热更新：延迟降低 22%，吞吐提升 35%',
    html: `
      <p>新版本推理引擎支持 <strong>LoRA 权重热更新</strong>，避免重启服务。结合张量并行与 KV Cache 优化，端到端延迟降低 <strong>22%</strong>，吞吐提升 <strong>35%</strong>。</p>
      <ul>
        <li>支持 FlashAttention-3</li>
        <li>多租户隔离增强</li>
        <li>Prometheus 指标新增时延分布直方图</li>
      </ul>
    `,
    category: '开源与工具',
    viewCount: 2614,
    favoritesCount: 97,
  },
  {
    title: 'AIGC 合规新规：标识与水印覆盖率需达 95%，处置时效 2 小时',
    html: `
      <p>新规要求生成式内容需具备可验证的 <strong>标识与水印</strong>，平台合规覆盖率需达到 <strong>95%</strong>；违规内容处置时效要求在 <strong>2 小时</strong> 内。</p>
      <p>模型训练需建立来源审计与可溯源机制，多平台已上线内容指纹与不可见水印方案。</p>
    `,
    category: '网络安全',
    viewCount: 3188,
    favoritesCount: 131,
  },
  {
    title: '企业级 RAG 平台升级：召回率升至 0.87，评测覆盖 12 指标',
    html: `
      <p>企业级 RAG 平台引入 <strong>混合检索（BM25 + 向量）</strong> 与 <strong>动态重排</strong>，召回率从 0.79 提升至 <strong>0.87</strong>。</p>
      <ul>
        <li>评测体系覆盖 12 项指标：准确率、相关性、一致性、幻觉率等</li>
        <li>在 30+ 客户中部署，平均回答准确率提升 <strong>18%</strong></li>
      </ul>
    `,
    category: 'AI 大模型',
    viewCount: 4046,
    favoritesCount: 175,
  },
];

async function getOrCreateCategory(name: string, menuId: string): Promise<string> {
  const existing = await prisma.category.findFirst({ where: { name, menuId } });
  if (existing) return existing.id;
  const created = await prisma.category.create({ data: { name, menuId } });
  return created.id;
}

async function seedHotNews() {
  console.log('🚀 开始导入热点资讯（hot_news）...');

  // 找到热点资讯菜单
  const hotNewsMenu = await prisma.menu.findFirst({ where: { sysCode: 'hot_news' } });
  if (!hotNewsMenu) {
    throw new Error('找不到 hot_news 菜单，请先在后台创建或运行初始化脚本');
  }
  console.log(`📋 找到菜单：${hotNewsMenu.name} (${hotNewsMenu.id})`);

  // 准备分类映射
  const categoryIdMap: Record<string, string> = {};
  for (const cat of NEWS_CATEGORIES) {
    const id = await getOrCreateCategory(cat, hotNewsMenu.id);
    categoryIdMap[cat] = id;
    console.log(`📂 分类就绪：${cat} -> ${id}`);
  }

  let createdCount = 0;
  for (const item of NEWS_ITEMS) {
    // 查重：按标题 + type=3（资讯）
    const exists = await prisma.content.findFirst({ where: { title: item.title, type: 3 } });
    let contentId: string;
    const summaryText = stripHtml(item.html).slice(0, 160);
    if (exists) {
      await prisma.content.update({
        where: { id: exists.id },
        data: {
          content: item.html,
          url: null,
          viewCount: item.viewCount ?? exists.viewCount,
          favoritesCount: item.favoritesCount ?? exists.favoritesCount,
          summary: summaryText,
        },
      });
      contentId = exists.id;
      console.log(`✏️  已更新资讯：${item.title}`);
    } else {
      // 创建内容（图片留空：coverId 为 null；正文为 HTML）
      const created = await prisma.content.create({
        data: {
          title: item.title,
          content: item.html,
          url: null,
          type: 3,
          viewCount: item.viewCount ?? Math.floor(1500 + Math.random() * 5000),
          favoritesCount: item.favoritesCount ?? Math.floor(50 + Math.random() * 200),
          coverId: null,
          summary: summaryText,
        },
      });
      contentId = created.id;
      console.log(`✅ 已创建资讯：${item.title}`);
      createdCount++;
    }

    // 建立分类关联
    const categoryId = categoryIdMap[item.category];
    if (categoryId) {
      const existsRel = await prisma.contentCategory.findFirst({
        where: { contentId, categoryId },
      });
      if (!existsRel) {
        await prisma.contentCategory.create({
          data: { contentId, categoryId },
        });
      }
    }
    // 轻微延时以避免数据库瞬时拥塞（可选）
    await new Promise((r) => setTimeout(r, 150));
  }

  console.log(`\n🎉 导入完成！本次新增 ${createdCount} 篇资讯。`);
}

async function main() {
  try {
    await seedHotNews();
  } catch (e) {
    console.error('❌ 脚本执行失败：', e);
    process.exitCode = 1;
  } finally {
    await prisma.$disconnect();
  }
}

if (require.main === module) {
  main();
}

export { seedHotNews };